package com.songlanyun.modules.integralrecord.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import com.songlanyun.common.drive.RootEntity;
import com.songlanyun.common.enums.BillConstant;
import com.songlanyun.common.enums.IntegralConstant;
import com.songlanyun.common.enums.OpusConstant;
import com.songlanyun.modules.integralrecord.model.dto.SaveIntegralDTO;
import lombok.Data;

/**
 * 会员积分的收支记录
 *
 * @author wuchao
 * @email sunlightcs@gmail.com
 * @date 2021-02-25 15:52:20
 */
@Data
@TableName("yxt_user_integral_record")
public class IntegralRecord extends RootEntity<Long, IntegralRecord> implements Serializable {
    private static final long serialVersionUID = 1L;


    public IntegralRecord() {
    }

    //积分收入
    public IntegralRecord(Long userId, BigDecimal value, IntegralConstant.InnerMode innerMode,
                          IntegralConstant.IntegralModelType modelType, Long modelId, String remark) {
        this.setUserId(userId);
        this.setValue(value);
        this.setInnerMode(innerMode);
        this.setModelType(modelType);
        this.setModelId(modelId);
        this.setRemark(remark);
    }

    /**
     *
     */
    @TableId
    private Long id;
    /**
     * 用户id
     */
    private Long userId;
    /**
     * 积分值
     */
    private BigDecimal value;
    /**
     * 帐单类型：
     * 0：支出
     * 1：收入
     */
    private BillConstant.BillMode billType;

    /**
     * 支出类型：
     * 0：
     * 1：兑换积分商品消费支出
     */
    private IntegralConstant.OuterMode outerMode;
    /**
     * 收入类型：
     * 0：""，
     * 1：被浏览，
     * 2：被点赞，
     * 3：被评论 ，
     * 4：被分享，
     * 5：浏览 ，
     * 6：点赞，
     * 7：评论，
     * 8：分享，
     * 9：购买商品，
     * 10：积分商品支付过期退还，
     * 11：取消订单退还，
     * 12：兑换积分商品维权退还
     */
    private IntegralConstant.InnerMode innerMode;

    @TableField(exist = false)
    private String mode;

    public String getMode() {
        String mode = "";
        switch (billType) {
            case EXPENDITURE:
                mode = outerMode.getMsg();
                break;
            case INCOME:
                mode = innerMode.getMsg();
                break;
        }
        this.mode = mode;
        return mode;
    }

    /**
     * 0：'opus' 作品，
     * 1：‘article’ 文章，
     * 2：‘goods’ 商品，
     * 3:  ‘order’ 订单
     * 4： 维权订单
     */
    private IntegralConstant.IntegralModelType modelType;
    /**
     *
     */
    private Long modelId;
    /**
     * 备注
     */
    private String remark;
    /**
     *
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @Override
    public Long getIdentity() {
        return this.getId();
    }
}
